const Router = require("@koa/router");
const jwt = require("jsonwebtoken");
const bcrypt = require("bcrypt");
// 确保你引入了jsonwebtoken模块
// 在 usercmd.js 中导入 User 模块
//const User = require("../model/user/user");

const router = new Router();
router.post("/register", async(ctx, next) => {
    try {
        const { account, password } = ctx.request.body;

        // 验证账户格式（手机号码或邮箱）
        const accountRegex =
            /^[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,}$|^1[3456789]\d{9}$/;
        if (!accountRegex.test(account)) {
            ctx.status = 400;
            ctx.body = {
                error: "无效的账户格式。请使用有效的电子邮件地址或手机号码。",
            };
            return;
        }

        // 验证密码规则（至少8个字符，包含大小写字母和数字）
        const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/;
        if (!passwordRegex.test(password)) {
            ctx.status = 400;
            ctx.body = {
                error: "密码必须至少包含8个字符，且包含大小写字母和数字。",
            };
            return;
        }

        // 查询数据库检查是否已存在相同手机号码的用户
        const existingUser = await ctx.state.User.findOne({
            where: { account },
        });

        if (existingUser) {
            // 如果用户已存在，返回相应提示
            ctx.status = 400;
            ctx.body = { error: "该手机号码已经创建了账户。" };
            return;
        }

        // 创建新用户
        const newUser = await ctx.state.User.create({
            account,
            password,
        });

        ctx.status = 201;
        ctx.body = { message: "用户创建成功。", user: newUser };
    } catch (error) {
        console.error("Error creating user:", error);
        ctx.status = 500;
        ctx.body = { error: "创建用户时发生错误。" + error };
    }
});

router.post("/login", async(ctx, net) => {
    try {
        let { account, password } = ctx.request.body;
        console.log(account, password);
        // 验证用户名和密码是否提供
        if (!account || !password) {
            ctx.status = 400;
            ctx.body = { error: "请提供有效的用户名和密码。" };
            return;
        }

        // 查找用户
        const user = await ctx.state.User.findOne({
            where: {
                account,
            },
        });
        //console.log(user);
        // 验证用户存在且密码正确
        if (await validatePassword(password, user.password) === false) {
            ctx.status = 401;
            ctx.body = { error: "无效的用户名或密码。" };
            return;
        } else {
            // 生成 JWT 令牌
            console.log(await validatePassword(password, user.password))
            const token = jwt.sign({ userId: user.id }, "your-secret-key", {
                expiresIn: "1h", // 设置令牌过期时间
            });

            ctx.status = 200;
            ctx.body = { token };
        }
        //ctx.body = null;
    } catch (error) {
        console.error("Error logging in:", error);
        ctx.status = 500;
        ctx.body = { error: "登录时发生错误。" };
    }
});

// 验证密码的函数
async function validatePassword(plainPassword, hashedPassword) {
    try {
        // 使用 bcrypt 的 compare 方法比对密码
        // return true;
        // const isMatch = await bcrypt.compare(plainPassword, hashedPassword);

        //console.log({ plainPassword, hashedPassword });
        if (plainPassword === hashedPassword) {
            console.log(1);
            return true;
        } else {
            console.log(2);
            return false;
        }
    } catch (error) {
        console.error("Error validating password:", error);
        //throw new Error("Error validating password.");
        return false;
    }
}
module.exports = router;